//
// Created by cch on 2022/5/1.
//

#ifndef IMU_GPS_EKF_BASE_TYPE_H
#define IMU_GPS_EKF_BASE_TYPE_H

#include <eigen3/Eigen/Dense>
#include <memory>
namespace IMUGPS {
struct imuData{
  Eigen::Vector3d acc;
  Eigen::Vector3d gyro;
  double timestamp;
};

struct gpsData {
  Eigen::Vector3d lla;
  Eigen::Matrix3d cov;
  double timestamp;
};

using ImuDataPtr = std::shared_ptr<imuData>;
using GpsDataPtr = std::shared_ptr<gpsData>;

struct State {
  Eigen::Vector3d lla;

  //误差状态变量
  Eigen::Vector3d G_P_I;
  Eigen::Vector3d G_V_I;
  Eigen::Matrix3d G_R_I;
  Eigen::Vector3d acc_bias;
  Eigen::Vector3d gyro_bias;

  //协方差
  Eigen::MatrixXd cov;

  double timestamp;
  ImuDataPtr imuDataPtr;
};
} // namespace IMUGPS

#endif // IMU_GPS_EKF_BASE_TYPE_H
